#ifndef __QUEUE_H
#define __QUEUE_H

#include "sys.h"
#include "stdlib.h"

#define ERROR_DATA 0xffffffff

typedef struct _Node Node;
typedef struct _Queue Queue;
typedef struct _Interator Interator;

struct _Node
{
	u32 data;
	Node* next;
};

struct _Queue
{
	Node* head;
	Node* tail;
	u16 length;
	void (*push)(Queue* thiz, u32 data); 			//向队尾添加数据
	u32 (*poll)(Queue* thiz);						//返回并删除队头数据
	Interator* (*create_interator)(Queue* thiz);	//创建迭代器
};

struct _Interator
{
	Queue* queue;
	Node* cru_node;
	u32 (*next)(Interator* thiz);					//返回迭代器当前指向的节点的数据
													//并使迭代器指向下一个节点
													//如果已经迭代完成则返回ERROR_DATA
};

// 模块接口
Queue* create_queue(void);
Node* create_node(void);

#endif
